/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package util;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
import java.util.Vector;

/**
 *
 * @author Thiago Nascimento e Pablo Viana
 */
public class Util {

    public static final Random RANDOM = new Random();

    /**
     * Método responsável por transformar um vetor de parâmetros em uma
     * mensagem um array de bytes.
     * 
     * @param parameters Vetor de parâmetros.
     * @return O array de bytes com os parâmetros empacotados.
     */
    public static byte[] empacotarParametros(Vector parametros) {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);

        byte[] resposta = null;

        parametros.trimToSize();

        try {
            // escreve os dados no OutputStream

            if (parametros != null) {
                int tamanho = parametros.size();
                for (int i = 0; i < tamanho; i++) {
                    Object param = parametros.elementAt(i);
                    if (param instanceof Byte) {
                        dos.writeByte(((Byte) param).byteValue());
                    } else if (param instanceof Integer) {
                        dos.writeInt(((Integer) param).intValue());
                    } else if (param instanceof Long) {
                        dos.writeLong(((Long) param).longValue());
                    } else if (param instanceof String) {
                        dos.writeUTF((String) param);
                    } else if (param instanceof byte[]) {
                        dos.write((byte[]) param);
                    } else if (param instanceof Boolean) {
                        dos.writeBoolean(((Boolean) param).booleanValue());
                    }
                }
            }

            // pega os dados enpacotados
            resposta = baos.toByteArray();

            if (dos != null) {
                dos.close();
                dos = null;
            }
            if (baos != null) {
                baos.close();
                baos = null;
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // retorna o array de bytes
        return resposta;
    }

    public static InputStream abrirRecurso(int idRecurso) {
        return Object.class.getResourceAsStream(Constantes.RESOURCE_PATH + idRecurso);
    }

    public static Vector[] sortearJogo() {
        Vector[] pecas = new Vector[4];
        for (int i = 0; i < 4; i++) {
            pecas[i] = new Vector();
        }

        int[] possibilidades = new int[28];
        for (int i = 0; i < 28; i++) {
            possibilidades[i] = i;
        }

        for (int i = 0; i < 100; i++) {
            int peca1 = RANDOM.nextInt(28);
            int peca2 = RANDOM.nextInt(28);

            int tmp = possibilidades[peca1];
            possibilidades[peca1] = possibilidades[peca2];
            possibilidades[peca2] = tmp;
        }

        int i = 0;
        for (int peca = 0; peca < 6; peca++) {
            for (int mao = 0; mao < 4; mao++) {
                pecas[mao].addElement(Constantes.pecas[possibilidades[i++]]);
            }
        }

        return pecas;
    }
}
